<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>角色属性</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="database-roles.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="user-manag.html">快退</a></td><td width="60%" align="center" valign="bottom">章18. 数据库角色和权限</td><td width="10%" align="right" valign="top"><a href="user-manag.html">快进</a></td><td width="10%" align="right" valign="top"><a href="privileges.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="ROLE-ATTRIBUTES">18.2. 角色属性</a></h1>
<p>一个数据库角色可以有一系列属性，这些属性定义他的权限，以及与客户认证系统的交互。</p>
<div class="VARIABLELIST">
<dl>
<dt>登录<a name="AEN22566"></a></dt>
<dd><p>只有具有 <tt class="LITERAL">LOGIN</tt> 属性的角色才可以用作数据库连接的初始角色名。一个带有 <tt class="LITERAL">LOGIN</tt> 属性的角色可以认为是和"数据库用户"相同的事物。要创建一个具有登录权限的角色，用下列之一</p>
<pre class="PROGRAMLISTING">CREATE ROLE <tt class="REPLACEABLE"><i>name</i></tt> LOGIN;
CREATE USER <tt class="REPLACEABLE"><i>name</i></tt>;</pre>
<p>除了 <tt class="COMMAND">CREATE USER</tt> 默认赋予 <tt class="LITERAL">LOGIN</tt> 之外，<tt class="COMMAND">CREATE USER</tt> 等价于 <tt class="COMMAND">CREATE ROLE</tt>(默认不赋予 <tt class="LITERAL">LOGIN</tt>)。</p></dd>
<dt>超级用户<a name="AEN22583"></a></dt>
<dd><p>数据库超级用户超越所有权限检查。这是一个危险的权限，应该小心使用；最好使用非超级用户完成你的大多数工作。要创建数据库超级用户，用 <tt class="LITERAL">CREATE ROLE <tt class="REPLACEABLE"><i>name</i></tt> SUPERUSER</tt> 命令。你必须用已经是超级用户的角色执行这条命令。</p></dd>
<dt>创建数据库<a name="AEN22591"></a></dt>
<dd><p>角色要想创建数据库，必须明确给出权限(对于超级用户是例外，因为他们超越所有权限检查)。要创建这样的角色，用 <tt class="LITERAL">CREATE ROLE <tt class="REPLACEABLE"><i>name</i></tt> CREATEDB</tt> 命令。</p></dd>
<dt>创建角色<a name="AEN22600"></a></dt>
<dd><p>角色要想创建角色，必须明确给出权限(对于超级用户是例外，因为他们超越所有权限检查)。要创建这样的角色，用 <tt class="LITERAL">CREATE ROLE <tt class="REPLACEABLE"><i>name</i></tt> CREATEROLE</tt> 命令。一个带有 <tt class="LITERAL">CREATEROLE</tt> 属性的角色也可以更改和删除其它角色，以及给其它角色赋予或者撤销成员关系。不过，要创建、更改、删除一个超级用户角色的成员关系，需要具有超级用户属性；只有 <tt class="LITERAL">CREATEROLE</tt> 还不够。</p></dd>
<dt>口令<a name="AEN22611"></a></dt>
<dd><p>只有在客户认证方法要求与数据库建立连接必须使用口令的时候，口令才比较重要。<tt class="OPTION">password</tt>, <tt class="OPTION">md5</tt>, <tt class="OPTION">crypt</tt> 认证方法使用口令。数据库口令与操作系统口令是无关的。在创建角色的时候可以这样声明一个口令：<tt class="LITERAL">CREATE ROLE <tt class="REPLACEABLE"><i>name</i></tt> PASSWORD '<tt class="REPLACEABLE"><i>string</i></tt>'</tt> 。</p></dd>
</dl>
</div>
<p>一个角色的属性可以在创建后用 <tt class="COMMAND">ALTER ROLE</tt> 修改。参考 <a href="sql-createrole.html"><i>CREATE ROLE</i></a> 和 <a href="sql-alterrole.html"><i>ALTER ROLE</i></a> 的手册获取细节。</p>
<div class="TIP">
<blockquote class="TIP">
<p><b>【提示】</b>创建一个具有 <tt class="LITERAL">CREATEDB</tt> 和 <tt class="LITERAL">CREATEROLE</tt> 权限，但是并非超级用户的角色是一个很好的习惯，你可以使用这个角色进行所有日常的数据库和角色管理。这个方法避免了以超级用户操作时，发生误操作导致的严重后果。</p>
</blockquote>
</div>
<p>一个角色也可以为许多运行时配置设置针对其个人的缺省，那些配置在<a href="runtime-config.html">章17</a>里描述。比如，如果出于某种原因你想在所有你做的连接中关闭索引扫描(不是个好主意)，你可以用：</p>
<pre class="PROGRAMLISTING">ALTER ROLE myname SET enable_indexscan TO off;</pre>
<p>这样就会保存该设置(但是不是立即设置)。然后，在这个角色随后的连接中就好像在会话开始之后都立即 <tt class="LITERAL">SET enable_indexscan TO off;</tt> 了一样。你也可以在会话中修改这个设置；它只是缺省。要撤销任何这样的设置，使用 <tt class="LITERAL">ALTER ROLE <tt class="REPLACEABLE"><i>rolename</i></tt> RESET <tt class="REPLACEABLE"><i>varname</i></tt>;</tt> 。请注意，对那些没有 <tt class="LITERAL">LOGIN</tt> 属性的角色，这些角色相关的缺省值几乎没什么用，因为它们从来不会被调用。</p>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="database-roles.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="privileges.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">数据库角色</td><td width="34%" align="center" valign="top"><a href="user-manag.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">权限</td></tr>
</table>
</div>
</body></html>